/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entity;

import java.io.Serializable;
import java.sql.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

/**
 *
 * @author Antonio
 */
@Entity
@IdClass(common.FornituraPk.class)
@NamedQueries({
    @NamedQuery(name = "fornitura.cercaFornituraNegozio",
    query = "SELECT f FROM Fornitura f WHERE f.negozio.id=?1 AND f.prodotto.codiceBarre=?2"),
    @NamedQuery(name = "fornitura.ottieniTutto", query = "SELECT f FROM Fornitura f"),
    @NamedQuery(name = "fornitura.prodottiDisponibiliNegozio", query = "SELECT f.prodotto FROM Fornitura f WHERE f.negozio.id = ?1 AND f.quantita > ?2"),
    @NamedQuery(name = "fornitura.prodottiInEsaurimentoNegozio", query = "SELECT f FROM Fornitura f WHERE f.negozio.id = ?1 AND f.quantita < ?2")})
public class Fornitura implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @JoinColumn(name = "negozio")
    @ManyToOne
    private Negozio negozio;
    @ManyToOne
    private AddettoNegozio addettoNegozio;
    @Id
    @JoinColumn(name = "prodotto")
    @ManyToOne()
    private Prodotto prodotto;
    @Column(nullable = false)
    private Integer quantita;
    @Column(nullable = false)
    private Date dataFornitura;

    /**
     * Get the value of negozio
     *
     * @return the value of negozio
     */
    public Negozio getNegozio() {
        return negozio;
    }

    /**
     * Set the value of negozio
     *
     * @param negozio new value of negozio
     */
    public void setNegozio(Negozio negozio) {
        this.negozio = negozio;
    }

    public Prodotto getProdotto() {
        return prodotto;
    }

    public void setProdotto(Prodotto prodotto) {
        this.prodotto = prodotto;
    }

    /**
     * Get the value of dataFornitura
     *
     * @return the value of dataFornitura
     */
    public Date getData() {
        return dataFornitura;
    }

    /**
     * Set the value of dataFornitura
     *
     * @param dataFornitura new value of dataFornitura
     */
    public void setData(Date data) {
        this.dataFornitura = data;
    }

    /**
     * Get the value of quantita
     *
     * @return the value of quantita
     */
    public Integer getQuantita() {
        return quantita;
    }

    /**
     * Set the value of quantita
     *
     * @param quantita new value of quantita
     */
    public void setQuantita(Integer quantita) {
        this.quantita = quantita;
    }

    /**
     * Get the value of addettoNegozio
     *
     * @return the value of addettoNegozio
     */
    public AddettoNegozio getAddettoNegozio() {
        return addettoNegozio;
    }

    /**
     * Set the value of addettoNegozio
     *
     * @param addettoNegozio new value of addettoNegozio
     */
    public void setAddettoNegozio(AddettoNegozio addettoNegozio) {
        this.addettoNegozio = addettoNegozio;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + (this.negozio != null ? this.negozio.hashCode() : 0);
        hash = 97 * hash + (this.prodotto != null ? this.prodotto.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Fornitura other = (Fornitura) obj;
        if (this.negozio != other.negozio && (this.negozio == null || !this.negozio.equals(other.negozio))) {
            return false;
        }
        if (this.prodotto != other.prodotto && (this.prodotto == null || !this.prodotto.equals(other.prodotto))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return prodotto.toString() + ", " + quantita + ", " + dataFornitura;
    }
}
